\documentclass[10pt]{article}
\usepackage[brazil]{babel}
\usepackage[utf8]{inputenc}

\title{\textbf{Relatório TP3}}
\author{\textbf{Grupo 25} \\
  Adriano Katayama Yamada (073858) \\
  Lucas Scorsim Schust(073380) \\
  Marcelo Moreira Holanda de Castro (071712)}
\date{\today}
\begin{document}

\maketitle

\section{Desenvolvimento}\

Desenvolvemos um sistema para um catálogo de obras de arte com algumas opções para o usuário como inserções de obras, consulta de obras e remocao de obras. Neste projeto criamos novas funcionalidades: remocao de registros com reaproveitamento de blocos livres(avail list) e consulta atraves de chaves secundarias. Com isso a insercao tambem teve que ser modificado, ja que reaproveitamos os blocos livres. A interface ainda continua simples e intuitiva.

Durante o desenvolvimento do projeto dividimos o trabalho para que os integrantes do grupo trabalhassem em paralelo. Nos fizemos a remocao como uma opcao para o usuario na interface inicial, sendo que ele devera digitar o titulo da obra. No meio do desenvolvimento decidimos que apos a remocao e/ou insercao de algum registro, somente na base de dados o registro seria removido ou inserido. Depois o programa recriaria a partir dela(base modificada) as chaves primarias e secundarias, e assim, facilitariamos muito o nosso trabalho sem ter que remover as chaves secundarias e criar uma avail list para cada uma.

Porem vimos que o programa estava ineficiente, principalmente com uma base de dados grande. Resolvemos mudar nosso programa: remover e inserir nas chaves secundarias e criar as 4 avail lists para cada um dos campos. Conseguimos remover nas chaves secundarias e criar uma avail list para cada. Porem nao conseguimos fazer a insercao reaproveitando os espacos das avail lists dos indices secundarios. O programa insere no final dos arquivos. Tivemos um trabalho a mais com essa mudanca mas o programa ganhou eficiencia.

\section{Guia rapido do programa }\

No inicio da interface, o usuario escolhe uma das seguintes opcoes disponiveis, digitando o numero correspondente a ela:\par
1 - Adicionar novo titulo\par
2 - Realizar consultas\par
3 - Remover titulo\par
4 - Sair

\begin{itemize}
\item \textbf{Adicionar novo titulo}: Ao adicionar uma nova obra o usuario devera digitar os seguintes campos:

Titulo da obra, tipo da obra, autor da obra, ano em que a obra foi realizada, valor da obra e identificador de imagem da obra.

Para cada campo o numero de caracteres maximo eh, respectivamente, 200, 100, 125, 4, 12 e 9. Para os campos ano e valor somente sao aceitos caracteres numericos.	Para o campo imagem os dois primeiros caracteres devem ser '2' e '5', os quatro seguintes caracteres numericos e os 3 ultimos 'j', 'p' e 'g'.

\item \textbf{Realizar consultas}: Ao realizar consultas, o usuario tem as seguintes opcoes:\par

1 - Listar todas as obras     - lista todas as obras em um arquivo html.
2 - Procurar obras por titulo - procura obras que tenha o titulo digitado pelo usuario.
3 - Procurar obras por tipo   - procura obras com o tipo digitado pelo usuario.
4 - Procurar obras por autor  - procura obras realizadas pelo autor digitado pelo usuario.
5 - Procurar obras por ano    - procura obras realizadas no ano digitado pelo usuario.
6 - Voltar                    - volta ao menu principal.\par
		Obs1.: Ao achar a obra, as informacoes da mesma sao geradas em um arquivo html.\\
		Obs2.: Nao importa se os caracteres digitados sao minusculos ou maiusculos.\\
		Obs3.: Para os campos titulo, tipo e autor, as obras sao encontradas com somente parte do campo digitado.\\
			Ex.: A obra "O pensador" e encontrado digitando-se 'o' ou 'pensador'.
			
\item \textbf{Remover titulo}: Ao remover uma obra o usuario deve digitar o titulo completo do jeito que esta no catalogo (case sensitive).

\item \textbf{Sair}: Finaliza o programa.
\end{itemize} 

\section{Utilitários}\ 

Utilizamos 3 utilitarios não necessários para a realização do projeto:

\begin{itemize} 
\item \textbf{Subversion}:

Utilizamos o tracker SVN a partir desse projeto. Os commits sao enviados para o e-mail \textit{mc326-grupo25@googlegroups.com}, assim todos os membros do projeto podem recebe-los.

 A pagina onde os arquivos estão hospedados é: \linebreak\textit{http://code.google.com/p/mc326-grupo25}. Nesse endereço estão todos os arquivos fontes, e uma base de dados (sem arquivos de imagens), além da página HTML criada pelo Doxygen.
 
 Um relatório mais detalhado do uso do SVN pode ser encontrado em: \linebreak\textit{http://www.students.ic.unicamp.br/\~\ ra071712/mc326-grupo25/index.html} porém alguns fatores devem ser levados em consideração: As linhas de código não estão muito fiéis à realidade pois enviamos o projeto anterior já completo e os arquivos gerados pelo doxygen.
 
\item \textbf{Doxygen}:

Utilizamos, assim como o SVN, o Doxygen a partir desse trabalho. A documentação gerada pelo Doxygen pode ser visualizada no endereço: \linebreak\textit{http://www.students.ic.unicamp.br/\~\ ra071712/html/index.html} ou abrindo a página index.html dentro da pasta html, enviada junto com o zip.

Essa documentação também está disponível no endereço supra-citado para hospedagem dos arquivos usados no SVN.

 Comentamos apenas os arquivos .h pois todas as funções já estão definidas nestes. Nos outros arquivos fizemos apenas alguns comentários explicando eventuais passagens do código, mas nada direcionado ao Doxygen.

\item \textbf{\LaTeX}:

 Este relatório foi feito pelo sistema \LaTeX que além de permitir uma visualização melhor do mesmo,tem como idéia central distanciar o autor o máximo possível da apresentação visual da informaçãoo, pois a constante preocupação com a formatação desvia o pensamento do autor do conteúdo do documento.

 Ao invés de trabalhar com idéias visuais, o usuário é encorajado a trabalhar com conceitos mais lógicos e é, consequentemente, mais independentes da apresentação é como capítulos, seções, ênfase e tabelas, sem contudo impedir o usuário da liberdade de indicar, expressamente, declarações de formatação. Esse sistema foi implementado também somente a partir deste trabalho, mas será utilizado, assim como SVN e Doxygen, para os próximos projetos que virão
 
\end{itemize}

\section{Breve descricao das fontes}\

Os arquivos do programa estao listados a seguir:
dados.c
inserir.c
consulta.c
keys.c
remove.c

\begin{enumerate}

\item \textbf{dados.c}: Este arquivo contem somente a funcao principal main, onde se encontra a interface principal do programa.

\item \textbf{inserir.c}: Este arquivo contem 12 funcoes relacionadas com a insercao:
\begin{itemize}

\item completa espacos: Funcao que completa com espacos uma string ate a posicao especificada.
\item remove espacos: Funcao que remove os espacos em branco digitados pelo usuario.
\item verifica: Funcao que verifica se determinada string contem somente numeros.
\item verifica imagem: Funcao que verifica se o campo imagem foi digitado corretamente.
\item Titulo: Funcao que adiciona na base de dados o titulo da obra.
\item Tipo: Funcao que adiciona na base de dados o tipo da obra.
\item Autor: Funcao que adiciona na base de dados o autor da obra.
\item Ano: Funcao que adiciona na base de dados o ano da obra.
\item Valor: Funcao que adiciona na base de dados o valor da obra.
\item Imagem: Funcao que adiciona na base de dados o identificador de imagem da obra.
\item verifica avail: funcao que retorna o nrr do arquivo da avail list.
\item insere: funcao que insere a obra.
\end{itemize}
\item \textbf{consulta.c}: Este arquivo contem 13 funcoes relacionadas com a consulta:
\begin{itemize} 
		\item compara: Funcao auxiliar para qsort/bsearch. Compara duas strings usando strcmp.
		\item menu consulta: funcao principal que contem o menu com opcoes da consulta.
		\item escreve: Funcao que escreve os dados da obra (menos imagem) no arquivo HTML.
		\item escreve img: Funcao que faz aparecer a imagem no arquivo HTML.
		\item inicio HTML: Escreve as tags que iniciam o codigo HTML.
		\item meio HTML: Arquivo que coordena a escrita do(s) resultado(s) da busca no arquivo HTML. Chama a funcao procura para isso.
		\item fim HTML: Escreve as tags que finalizam o codigo HTML.
		\item procura tit: Procura a obra com titulo especificado.
		\item procura tipo: Procura a obra com tipo especificado.
		\item procura autor: Procura a obra com autor especificado.
		\item procura ano: Procura a obra com ano especificado.
		\item procura aux: Procura (usando bsearch) um titulo na lista de obras e cria um arquivo HTML com o resultado.
		\item lista HTML: Lista todas as obras em um arquivo HTML.
\end{itemize} 
	\item \textbf{keys.c}: Este arquivo contem 6 funcoes relacionadas com a criacao/carregamento das chaves:
\begin{itemize} 
		\item Writefile: Funcao que escreve os arquivos pks 
		\item Fillblanks: Funcao para completar espacos. 
		\item Le PK: Funcao adicionar os registros de pk e sk na memoria em forma de vetor.
		\item GravaArray: Funcao para gravar as informacoes dos vetores de pk e sk em arquivos.
		\item Str toupper: Funcao para transformar uma str em maiusculo.
		\item Secondary: Funcao adicionar os registros de pk e sk na memoria em forma de vetor
\end{itemize}	 
	\item \textbf{remove.c}: Este arquivo contem 5 funcoes relacionadas com a remocao:
\begin{itemize} 
		\item cria avail: Funcao para criar a avail list, com cabeca apontando para o final da lista.
		\item remocao: Funcao para remover obras da base e dos indices.
		\item remove base: Remove o registro da base de dados.
		\item remove SK: Remove o registro de todos os indices secundarios.
		\item remove aux: Auxiliar de remocao do arquivo contendo os indices secundarios.
		\item remove PK: Remove o registro do vetor de indice primario.
\end{itemize} 
\end{enumerate}

\end{document}
